package com.leaves.leetcode.string.t1456_MaxVowels;


/**
 * 核心要点：
 * 固定长度滑动窗口
**/
 class Solution {
    /**
     * 固定长度滑动窗口
     * 当窗口长度固定后，那么在窗口移动过程中只需要移除left(right - k)的统计量，并添加right的统计量即可动态统计固定长度子串里的统计量。
     * 时间复杂度：O(|s|)
     * 空间复杂度：O(1)
     * @param s
     * @param k
     * @return
     */
    public int maxVowels(String s, int k) {
        int len = s.length();
        int subStrVowels = 0;

        for (int i = 0; i < k; i++) {
            subStrVowels += this.isVowels(s.charAt(i)) ? 1 : 0;
        }
        int ans = subStrVowels;
        for (int i = k; i < len; i++) {
            subStrVowels += (this.isVowels(s.charAt(i)) ? 1 : 0) - (this.isVowels(s.charAt(i - k)) ? 1 : 0);
            ans = Math.max(ans, subStrVowels);
        }
        return ans;
    }

    boolean isVowels(char ch) {
        return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u';
    }
 }